yield pauses the generator and can be called multiple times, while return ends the generator and sets done: true; further calls to next() return { done: true }.
yield is used to produce intermediate values without terminating the generator; you can have many yield statements. return terminates the generator; the returned value is the final value and done becomes true. If no return is present, the generator implicitly returns undefined. After a return, the generator cannot be resumed.